# -*- coding: utf-8 -*-
# &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
# D7Cl0ud360
# 邮箱: 18656042877@163.com
# 作者：'sugar'
# 公司网址： http://www.dtcloud360.com/
# Copyright 中亿丰信息科技(苏州)有限公司
# 日期：2023/7/17 14:28
# &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
import re
from typing import List
from pydantic import Field, validator
from .models import BaseApiModel


class UserBodyModel(BaseApiModel):
    name: str = Field(..., title='用户名', description='用户名')
    dep_id: int = Field(..., title='部门', description='部门')
    mobile: str = Field(..., title='手机号', description='手机号')
    email: str = Field(None, title='邮箱', description='邮箱')
    role_ids: List[int] = Field([], title='角色', description='角色')
    sex: str = Field(None, title='性别')
    login: str = Field(..., title='账号名', description='账号名')
    password: str = Field('Zyf@123456', title='账号密码', description='账号密码')
    status: bool = Field(True, title='状态')
    introduction: str = Field(None, title='备注', max_length=300)

    @validator('mobile')
    def mobile_validator(cls, v):
        if not re.findall(r"^1[3456789]\d{9}$", v):
            raise ValueError('请输入正确手机号!')

        return v

    @validator('name')
    def name_validator(cls, name):
        if ' ' in name:
            raise ValueError('用户名不能存在空格!')
        if re.findall(r"[!#$%^&*()-+={}<>?/:'\"]", name):
            raise ValueError('名称不能存在特殊字符!')
        return name

    @validator('login')
    def login_validator(cls, login):
        if ' ' in login:
            raise ValueError('账号名不能存在空格!')
        if re.findall(r"[!#$%^&*()-+={}<>?/:'\"]", login):
            raise ValueError("账号不能存在特殊字符--!#$%^&*()-+={}<>?/:'")

        return login
